home *** CD-ROM | disk | FTP | other *** search
/ Revista CD Expert 8 / Revista CD Expert nº 08 CD1.iso / Utilitarios / Programacao / Pacific C for DOS / INCLUDE / STDARG.H < prev    next >
C/C++ Source or Header  |  1995-03-08  |  1KB  |  51 lines

  1. /*    Macros for accessing variable arguments */
  2.  
  3. #ifndef    _STDARG
  4.  
  5. #if    (defined(i8051) && !defined(EXTERNAL_STACK))
  6. typedef near void * va_list[1];
  7. #define    va_start(ap, parmn)    *ap = __va_start((void *)&parmn)
  8. #pragma inline(__va_start)
  9. extern near void *        __va_start(void *);
  10. #define    va_arg(ap, type)    (*--*(type near **)(ap))
  11. #define    _STDARG
  12. #elif    defined(m6805)
  13. typedef near void * va_list[1];
  14. #define    va_start(ap, parmn)    *ap = __va_start()
  15. #pragma inline(__va_start)
  16. extern near void *        __va_start(void);
  17. #define    va_arg(ap, type)    (*(*(type near **)ap)++)
  18. #define    _STDARG
  19. #else
  20. typedef void *    va_list[1];
  21. #endif
  22.  
  23. #ifdef    i8086
  24. #ifdef    FLAT_MODEL
  25. #define    _STACK_ALIGN    4
  26. #else
  27. #define    _STACK_ALIGN    2
  28. #endif
  29. #endif
  30.  
  31. #ifdef    z80
  32. #define    _STACK_ALIGN    2
  33. #endif
  34.  
  35. #ifdef    _STACK_ALIGN    
  36. #define    va_start(ap, parmn)    *ap = (char *)&parmn + ((sizeof(parmn)+_STACK_ALIGN-1)&~(_STACK_ALIGN-1))
  37. #define    va_arg(ap, type)    (*(*(type **)ap)++)
  38. #define    _STDARG
  39. #endif
  40.  
  41. #ifndef    _STDARG
  42. #define    va_start(ap, parmn)    *ap = (char *)&parmn + sizeof parmn
  43. #define    va_arg(ap, type)    (*(*(type **)ap)++)
  44. #define    _STDARG
  45. #endif
  46.  
  47. #define    va_end(ap)
  48.  
  49.  
  50. #endif    /* STDARG */
  51.